// 防抖
export function debounce(fn, time, immediate = true) {
  let timer; //标记是否立即调用过
  let isInvoke = false;
  return function (...args) {
    //如果没有立即调用过，并且需要立即调用的话
    if (!isInvoke && immediate) {
      fn.apply(this, args);
      isInvoke = true;
    } else {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this, args);
        isInvoke = false; //不要忘了在防抖函数结束的时候重置isInvoke哦~
      }, time);
    }
  };
}

// 节流
export function throttle(fn, time, options = { leading: false }) {
    const { leading } = options
    let lastTime = 0
    let timer
    return function () {
        const nowTime = new Date().getTime()
        //如果不希望第一个触发的是立即执行的话，就设置lastTime为nowTime
        //这样的话时间间隔就会从0开始计算，直到时间间隔大于给定的time
        
        //lastTime === 0 其实可以用于表示是不是一段连续触发事件的第一个事件
        if(lastTime === 0 && leading === false) lastTime = nowTime 
        const remainTime = time - (nowTime - lastTime)
        if (remainTime <= 0) {
            fn.apply(this)
            lastTime = nowTime
        } 
    }
}
